package main.java;

/**
 * @program: pratice
 * @author: 关键我是大怪
 * @create: 2021-10-03 20:16
 */

import java.util.Stack;

/**
 * 题目：
 * 给定一个整数数组 asteroids，表示在同一行的小行星。
 * 对于数组中的每一个元素，其绝对值表示小行星的大小，正负表示小行星的移动方向（正表示向右移动，负表示向左移动）。每一颗小行星以相同的速度移动。
 * 找出碰撞后剩下的所有小行星。碰撞规则：两个行星相互碰撞，较小的行星会爆炸。如果两颗行星大小相同，则两颗行星都会爆炸。两颗移动方向相同的行星，永远不会发生碰撞。
 * <p>
 * 示例：
 * 输入：asteroids = [5,10,-5]
 * 输出：[5,10]
 * 解释：10 和 -5 碰撞后只剩下 10 。 5 和 10 永远不会发生碰撞。
 */

public class Test50_小行星碰撞 {
    public int[] asteroidCollision(int[] t) {
        Stack<Integer> s = new Stack<>();
        int i = 0;
        while (i < t.length) {
            if (s.isEmpty() || s.peek() < 0 || t[i] > 0) {
                s.push(t[i]);
            } else if (s.peek() <= -t[i]) {
                if (s.pop() < -t[i]) {
                    continue;
                }
            }
            i++;
        }
        int[] a = new int[s.size()];
        for (int j = a.length - 1; j >= 0; j--) {
            a[j] = s.pop();
        }
        return a;
    }
}
